/*
 * Triangle.h
 *
 *  Created on: Sep 1, 2013
 *      Author: marchi
 */

#ifndef TRIANGLE_H_
#define TRIANGLE_H_
#include "MyUtilClass.h"
using namespace DVECT;
using namespace MATRIX;
using std::cout;
using std::endl;
class Triangle {
    Dvect v0, v1, v2;
    Dvect normal;
    double RadiusPlane;
    void copy(Dvect v0, Dvect v1, Dvect v2){
		this->v0=v0;
		this->v1=v1;
		this->v2=v2;
		Dvect x1=v1-v0;
		Dvect x2=v2-v0;
		x1.normalize();
		x2.normalize();
		double Denom=sqrt(1.0-(x1*x2)*(x1*x2));
		normal=(x1^x2)/Denom;
		Dvect tmp=(v0+v1+v2)/3.0;
		RadiusPlane=tmp.Norm();
    }
public:
	Triangle(Dvect v0, Dvect v1, Dvect v2): normal(0.0), RadiusPlane(0.0){
		copy(v0,v1,v2);
	}
	Dvect getnormal(){
		return normal;
	}
	Triangle & operator()(Dvect v0, Dvect v1, Dvect v2){
		copy(v0,v1,v2);
		return *this;
	}
	void Scale(double Radius){
		Dvect vv0=v0*Radius;
		Dvect vv1=v1*Radius;
		Dvect vv2=v2*Radius;
		copy(vv0,vv1,vv2);
	}
	Dvect & getV0(){return v0;}
	Dvect & getV1(){return v1;}
	Dvect & getV2(){return v2;}
	double getRadius(){return RadiusPlane;}
	~Triangle();
};

#endif /* TRIANGLE_H_ */
